package com.zs.java.reflect;

import java.lang.reflect.Field;

/**
 * @author madison
 * @description
 * @date 2021/6/4 17:35
 */
public class Demo2 {

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        // jdk1.9之后 VM options : --add-opens java.base/java.lang=ALL-UNNAMED
        Class cache = Integer.class.getDeclaredClasses()[0];
        Field field = cache.getDeclaredField("cache");
        field.setAccessible(true);
        int modify = field.getModifiers();

        //final修饰的基本类型不可修改
//        if (field.getType().isPrimitive() && Modifier.isFinal(modify)) {
//        }
//        //获取访问权限
//        if (!Modifier.isPublic(modify) || Modifier.isFinal(modify)) {
//
//        }
//        //static final同时修饰
//        boolean removeFinal = Modifier.isStatic(modify) && Modifier.isFinal(modify);
//        //static final同时修饰
//        removeFinal = Modifier.isStatic(modify) && Modifier.isFinal(modify);
//        if (removeFinal) {
//            Field modifiersField = Field.class.getDeclaredField("modifiers");
//            modifiersField.setAccessible(true);
//            modifiersField.setInt(field, modify & ~Modifier.FINAL);
//        }
//
//        Field[] declaredFields = Field.class.getDeclaredFields();
//        System.out.println(declaredFields.length);
//
//        Field modifiers = Field.class.getDeclaredField("modifiers");
//        modifiers.setAccessible(true);
//        modifiers.setInt(field, modify & ~Modifier.FINAL);


        Integer[] array = (Integer[]) field.get(cache);
        // array[129] is 1
        array[130] = array[129];
        // Set 2 to be 1
        array[131] = array[129];
        // Set 3 to be 1
        Integer a = 1;
        if (a == (Integer) 1 && a == (Integer) 2 && a == (Integer) 3) {
            System.out.println("success");
        }
    }
}
